package cc.rengu.oltp.service.realize;

import cc.rengu.oltp.service.model.PasswordInfo;

/**
 * 安全键盘加解密验证接口类
 * Created by wangcheng on 2021/3/25 14:51
 */
public interface SafeKeyBoardService<T> {

    /**
     * 获取密码密文
     *
     * @param instId            多法人标识
     * @param channelType       调用渠道类型
     * @param passwordInfo      密码信息
     * @param extraPasswordInfo 密码附加信息(可自定义)
     * @return 密码密文
     * @throws Exception 异常
     */
    String encryptPassword(String instId, String channelType, PasswordInfo passwordInfo, T extraPasswordInfo) throws Exception;

    /**
     * 校验密码
     *
     * @param instId              多法人标识
     * @param channelType         调用渠道类型
     * @param passwordVerifyValue 需要验证的密码信息
     * @param passwordInfo        密码信息
     * @param extraPasswordInfo   密码附加信息(可自定义)
     * @return true-校验通过，false-校验失败
     * @throws Exception 异常
     */
    boolean verifyPassword(String instId, String channelType, String passwordVerifyValue, PasswordInfo passwordInfo, T extraPasswordInfo) throws Exception;

    /**
     * 密码转PIN
     *
     * @param instId              多法人标识
     * @param channelType         调用渠道类型
     * @param passwordCipherValue 密码密文
     * @param passwordInfo        密码信息
     * @param extraPasswordInfo   密码附加信息(可自定义)
     * @return 转换后的密文
     * @throws Exception 异常
     */
    String transferPassword(String instId, String channelType, String passwordCipherValue, PasswordInfo passwordInfo, T extraPasswordInfo) throws Exception;
}
